package com.itheima.arraydemo;

import org.w3c.dom.ls.LSOutput;

import java.util.Random;

/*
 *      生成随机索引
 *          数据交换
 *
 *      -->整合,完成数组的数据的打乱
 * */
//注意类名
public class ArrayDemo05 {
    /*public static void main(String[] args) {
    //打印调用
        *//*method1();
        method2();*//*
        //定义数组-->第一种格式,用静态初始化
        int[] arr = {1, 2, 3, 4, 5};
        //创建随机数对象
        Random r = new Random();
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            //调用方法获取随机索引,由于要跟数组进行对应,所以,方法的参数要写数组长度
            int index = r.nextInt(arr.length);

            //进行数据交换
            //定义一个临时变量
            int temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;

        }

        //对数组进行遍历
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");

        }

    }*/

    /*//定义方法 1.参数列表 2.返回值类型
    //数据交换
    public static void method1() {
        //定义变量
        int a = 10;
        int b = 20;
        //定义中间变量
        int temp = 0;
        //交换
        temp = a;
        a = b;
        a = temp;

        //打印结果
        System.out.println(a);
        System.out.println(b);

    }

    //定义方法 进行随机索引生成
    public static void method2() {
        //定义数组
        int[] arr = {1, 3, 4, 5, 6};
        //创建随机数对象
        Random random = new Random();
        //调用方法,生成随机数,并定义变量接受,随机数的范围是数组的长度
        int num = random.nextInt(arr.length);

        //对结果进行输出
        System.out.println(num);

    }*/
    //第一遍
    //main方法程序的主入口
    public static void main(String[] args) {
        //定义数组 --> 用格式1 简化格式
        int[] arr = {1, 2, 4, 5, 6, 78};

        //创建随机数对象
        Random random = new Random();
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            //调用方法获取一个随机索引,注意数据范围要数组的索引内
            int index = random.nextInt(arr.length);
            /*//调用方法进行数据交换
            //进行数据交换
            //定义一个临时变量
            int temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;*/
            swap(arr, i, index);
        }

        //调用方法,进行结果查询
        printArray(arr);
    }

    //    public static void swap(int number1, int number2) {
//        int temp = number1;
//        number1 = number2;  // 修改的是副本 number1
//        number2 = temp;     // 修改的是副本 number2
//    }
   /* //定义方法交换数据
    //两个明确, 1.参数列表 2.返回值类型
    //分析 需要交换的两个参数 不需要返回值
    public static void swap(int number1, int number2){
        //对数据进行交换
        int temp = number1;
        number1 = number2;
        number2 = temp;
    }*/
    public static void swap(int[] array, int index1, int index2) {
        int temp = array[index1];  // 通过索引直接读取数组的值
        array[index1] = array[index2];  // 通过索引直接修改数组
        array[index2] = temp;
    }


    //定义方法进行遍历数组
    //两个,明确 1.参数列表 2.返回值类型
    //分析 参数列表 需要一个数组 不需要返回值类型
    //按照格式进行打印
    public static void printArray(int[] arr) {
        //先打印一个[
        System.out.print("[");//注意不能使用,换行打印
        //遍历之后--->在进行打印操作
        for (int i = 0; i < arr.length; i++) {
            if (arr.length - 1 == i) {
                System.out.print(arr[i]);
            } else {
                System.out.print(arr[i] + ", ");
            }
        }
        //补上一个]
        System.out.print("]");
    }

}
